#define _CRT_SECURE_NO_WARNINGS 1

//1
//int cmp(void* p1, void* p2)
//{
//    return ((*(int*)p1)) - ((*(int*)p2));
//}
//
//int dominantIndex(int* nums, int numsSize) {
//
//    if (numsSize == 1)
//        return 0;
//
//    int MAX = nums[0];
//    int tmp = 0;
//    for (int i = 0; i < numsSize; i++)
//    {
//        if (nums[i] > MAX)
//        {
//            MAX = nums[i];
//            tmp = i;
//        }
//    }
//
//    qsort(nums, numsSize, sizeof(nums[0]), cmp);
//    if (2 * nums[numsSize - 2] <= MAX)
//    {
//        return tmp;
//    }
//
//    return -1;
//}

//int cmp(void* p1, void* p2)
//{
//    return (*((int*)p1)) - (*((int*)p2));
//}
//int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
//    int i = 0;
//    int n1 = nums1Size;
//    int n2 = nums2Size;
//    int p1 = 0;
//    int p2 = 0;
//    int* ret = (int*)malloc((sizeof(int)) * (n1 + n2));
//    qsort(nums1, n1, sizeof(int), cmp);
//    qsort(nums2, n2, sizeof(int), cmp);
//
//    while (p1 <= n1 - 1 && p2 <= n2 - 1)
//    {
//        if (nums1[p1] > nums2[p2])
//        {
//            p2++;
//        }
//        else if (nums1[p1] < nums2[p2])
//        {
//            p1++;
//        }
//        else
//        {
//            if (i == 0)
//            {
//                *ret = nums1[p1];
//                i++;
//                p1++;
//                p2++;
//            }
//            else
//            {
//                if ((*(ret + i - 1)) != nums1[p1])
//                {
//                    *(ret + i) = nums1[p1];
//                    i++;
//                    p1++;
//                    p2++;
//                }
//                else if (p1 == n1 - 1 || p2 == n2 - 1)
//                {
//                    p1++;
//                    p2++;
//                }
//            }
//        }
//        if (p1 >= n1 || p2 >= n2)
//        {
//            break;
//        }
//    }
//
//    (*returnSize) = i;
//    return ret;
//}
//int main()
//{
//    int nums1[4] = { 1,2,2,1 };
//    int nums2[2] = { 2,2 };
//    int ps=0;
//    int* pb = intersection(nums1, 4, nums2, 2, &ps);
//    return 0;
//}
//
//
//int cmp(void* p1, void* p2)
//{
//    return (*((int*)p1)) - (*((int*)p2));
//}
//int pp(int* ret, int n, int k)
//{
//    int flag = -1;
//    int i = 0;
//    while (k--)
//    {
//        if (*(ret + i) == n)
//        {
//            flag = 0;
//            break;
//        }
//        else
//        {
//            flag = 1;
//        }
//        i++;
//    }
//    return flag;
//}
//
//int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
//    int k = 0;
//    int n1 = nums1Size;
//    int n2 = nums2Size;
//    int p1 = 0;
//    int p2 = 0;
//    int* ret = (int*)malloc((sizeof(int)) * (n1 + n2));
//
//    for (int i = 0; i < n1; i++)
//    {
//        for (int j = 0; j < n2; j++)
//        {
//            if (nums1[i] == nums2[j])
//            {
//                if (k == 0)
//                {
//                    *ret = nums2[j];
//                    k++;
//                    break;
//                }
//                else
//                {
//                    if (pp(ret, nums2[j], k))
//                    {
//                        *(ret + k) = nums2[j];
//                        k++;
//                        break;
//                    }
//                }
//            }
//        }
//    }
//    (*returnSize) = k;
//    return ret;
//}

#include<stdio.h>

int removeElement(int* nums, int numsSize, int val)
{
    int src = 0;
    int dis = 0;
    int n = numsSize;
    while (src <= n - 1 || dis <= n - 1)
    {
        if ((src == dis) && (nums[src] != val))
        {
            src++;
            dis++;
        }
        else if ((nums[src] == nums[dis]) && (nums[src] == val))
        {
            src++;
        }
        else if ((nums[src] != val) && (nums[dis] == val))
        {
            nums[dis] = nums[src];
            src++;
            dis++;
        }
        else if ((src != dis) && (nums[src] != val) && (nums[dis] != val))
        {
            src++;
            dis++;
        }
        else if ((nums[src] == val) && (nums[dis] != val))
        {
            nums[src] = nums[dis];
            src++;
            dis++;
        }

    }
    return n;
}

int main()
{
    int arr[] = { 3,2,2,3 };
    removeElement(arr, 4, 3);
    getchar();
    return 0;
}